
import logging
from config import Config
import processor
from concurrent.futures import ThreadPoolExecutor, as_completed
import utils
import rich_utils

def main():

    utils.init_logging()

    rich_utils.progress_x = rich_utils.progress_init()

    logging.info("===== 任务开始！=====")

    """检查地址有效性并创建输出目录"""
    # 检查输入输出目录
    if not Config.INPUT_CSV_DIR.exists():
        logging.error("CSV列表文件目录不存在或不是有效目录，请检查！")
        return
    # 输出目录不存在则自动创建
    Config.OUTPUT_PDF_ROOT_DIR.mkdir(parents=True, exist_ok=True)

    # 获取所有CSV文件路径（转换为列表，便于获取总数量）
    csv_files_list = list(Config.INPUT_CSV_DIR.glob("*.csv"))  # 生成器 -> 列表
    csv_total = len(csv_files_list)  # 总文件数
    logging.info(f"检测到的csv文件数：{csv_total}")

    progress = rich_utils.progress_x
    # 2. 添加任务（描述为“处理数据”，总进度100）
    task_id = progress.add_task("总进度-CSV文件读取", total=csv_total)

    progress.start()
    with ThreadPoolExecutor(max_workers=Config.FILE_MAX_WORKERS, thread_name_prefix="Pool-Thread") as executor_total:

        # 提交任务到线程池
        futures = []
        for count, csv_file in enumerate(csv_files_list):
            future = executor_total.submit(processor.loop_csv_list_to_pdf, csv_path=csv_file) # 多次尝试读取csv并处理
            # future.add_done_callback(lambda f: rich_utils.progress_update(f, progress, task_id, 1))
            futures.append(future)
        for future in as_completed(futures):
            result = future.result()  # 阻塞，直到该任务完成并返回结果
            rich_utils.progress_update(0, progress, task_id, 1)
    progress.stop()
    logging.info("===== 任务成功！=====")

if __name__ == "__main__":
    main()


